# -*- coding: utf-8 -*-
# @Time : 2020/12/30 上午11:24
# @Author : 蚢
# @Description :1.把函数视作对象；2.高阶函数；3.匿名函数；4.可调用对象；
# 5.用户定义的可调用类型；6.函数内省；
# Python 中常用的高阶函数有内置函数 sorted、min、max 和 functools. partial

# 2.接受函数为参数，或者把函数作为结果返回的函数是高阶函数
fruits = ['strawberry', 'fig', 'apple', 'cherry', 'raspberry', 'banana']
print(sorted(fruits, key=len))

# 3.lambda：Python 简单的句法限制了 lambda 函数的定义体只能使用纯表达式
print(sorted(fruits, key=lambda word: word[::-1]))

# 4.Python 没有 new 运算符，所以调用类自动调用__new__()方法，创建实例，然后运行__init__()
# 使用callable()方法，可以判断其是否可以调用。
print([callable(obj) for obj in (str, abs, 11)])

# 5.只需实现实例方法 __call__任何 Python 对象都可以表现得像函数.
# 6.函数内省 __dir__
# 7.定位参数传入 *, **
# 9.函数参数注解 ___annotations___()可以查看
def demo(name:str, age:'int>0'=20)->str:
    return name+':'+ age
print(demo.__annotations__)
# 10.operator模块，functools.partial冻结参数。
